package domein;

import java.sql.SQLException;
import java.util.List;

import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;

import domein.Models.WereldTreeModel;
import domein.Locatie;

import persistentie.MapperFactory;

public class DomeinController {
	
	private Wereld wereld;
	private VragenVuller vragenVuller;
	private BerekeningenRoutes br;
	private WereldTreeModel wtm;
	
	public DomeinController()  throws ClassNotFoundException, SQLException
	{
		this.br = new BerekeningenRoutes();
		wtm = new WereldTreeModel(this);
	}

	public boolean deleteLocatie(Locatie locatie) {
		//Commented automatically
		//return;
		return false;
	}

	public void setKlimaatGegevensLocatie() {
		return;
	}

	public void getKlimaatGegevensLocatie(Locatie locatie) {
		return;
	}

	public void landToevoegen(Object geselecteerdeNode, String naam, String code ) {
		wtm.landToevoegen(geselecteerdeNode, naam, code);
	}
	
	public void locatieToevoegen(Object geselecteerdeNode, String naamLocatie,float breedtegraad, float lengtegraad, int hoogte ) {
		Locatie locatie = null;
		int sleutel = wtm.lokatieToevoegen(geselecteerdeNode, naamLocatie, breedtegraad, lengtegraad, hoogte);
		
		if(sleutel > 0) {
			locatie = new Locatie(sleutel, naamLocatie, breedtegraad, lengtegraad, hoogte, 1);
			DefaultMutableTreeNode parent = (DefaultMutableTreeNode) geselecteerdeNode;
			TreeNode[] path = parent.getPath();
			wereld.getContinenten().get(path[1].toString()).getLanden().get(path[2].toString()).voegLocatieToeAanLand(locatie);
		}
	}

	public void verwijderLocatie(DefaultMutableTreeNode geselecteerdeNode) {
		wtm.locatieVerwijderen(geselecteerdeNode);
	}

	public Locatie selecteerLocatie(TreeNode[] wereldPath) {
		return wereld.getContinenten().get(wereldPath[1].toString()).getLanden().get(wereldPath[2].toString()).getLocaties().get(wereldPath[3].toString());
	}

	public Land selecteerLand(int index) {
		//Commented automatically
		//return;
		return null;
	}

	public Continent selecteerContinent(int index) 
	{
		return null;
	}
	
	public void setWereld(Wereld wereld)
	{
		this.wereld = wereld;
	}
	
	public List<Locatie> berekenKortsteRoute(List<Locatie> locaties) {
		return br.berekenKortsteRoute(locaties);
	}
	
	public List<Locatie> berekenLangsteRoute(List<Locatie> locaties) {
		return br.berekenLangsteRoute(locaties);
	}

	public List<Locatie> berekenDroogsteRoute(List<Locatie> listLocaties) {
		// TODO Auto-generated method stub
		return null;
	}

	public List<Locatie> berekenNatsteRoute(List<Locatie> listLocaties) {
		// TODO Auto-generated method stub
		return null;
	}

	public List<Locatie> berekenKoudsteRoute(List<Locatie> listLocaties) {
		// TODO Auto-generated method stub
		return null;
	}

	public List<Locatie> berekenWarmsteRoute(List<Locatie> listLocaties) {
		// TODO Auto-generated method stub
		return null;
	}
	
	public Vragen getVragen(String taal) throws IllegalStateException, SQLException, ClassNotFoundException {
		this.vragenVuller = new VragenVuller(taal);
		Vragen vragen = vragenVuller.getVragen();
		
		return vragen;
	}
	
	public void wijzigLokatie(Locatie locatie)  throws ClassNotFoundException, SQLException{
		MapperFactory.getInstance().getMapper(Locatie.class).wijzig(locatie);
	}

}
